R Code for Lecture 22 (Wednesday, November 7, 2012)
gala <- read.table('ecol 563/galapagos.txt', header=T)
library(MASS)
out.NB2 <- glm.nb(Species~log(Area), data=gala)
gala$mu <- fitted(out.NB2)
gala$z <- dnbinom(gala$Species, mu=fitted(out.NB2), size=out.NB2$theta)
out.p <- lapply(1:29, function(x) dnbinom(0:1000, mu=fitted(out.NB2)[x], size=out.NB2$theta))
gala$ux <- sapply(1:29, function(x) max((0:1000)[out.p[[x]]>1e-5]))
gala$lx <- rep(0, 29)
gala$uy <- sapply(out.p, max)
gala$ly <- rep(0, 29)
library(lattice)
prepanel.ci2 <- function(x, y, ly, lx, uy, ux, subscripts, ...) {
list(ylim=range(y, uy[subscripts], ly[subscripts], finite=T), xlim=range(x, ux[subscripts], lx[subscripts], finite=T))}
xyplot(z~Species|Island, data=gala, ux=gala$ux, lx=gala$lx, uy=gala$uy, ly=gala$ly, prepanel=prepanel.ci2, ylab='Probability', xlab='Species richness', panel=function(x, y, subscripts){
panel.xyplot(0:1000, dnbinom(0:1000, mu=gala$mu[subscripts], size=out.NB2$theta), type='h', col='grey')
panel.abline(v=x, col=2, lty=2)},
scale=list(x='free', y='free'), strip=strip.custom(par.strip.text=list(cex=0.8)))
xyplot(z~Species|Island, data=gala, ux=gala$ux, lx=gala$lx, uy=gala$uy, ly=gala$ly, prepanel=prepanel.ci2, ylab='Probability', xlab='Species richness', layout=c(4,4), panel=function(x, y, subscripts){
panel.xyplot(0:1000, dnbinom(0:1000, mu=gala$mu[subscripts], size=out.NB2$theta), type='h', col='grey')
panel.abline(v=x, col=2, lty=2)},
scale=list(x='free', y='free'), strip=strip.custom(par.strip.text=list(cex=0.8)))
par(ask=T)
xyplot(z~Species|Island, data=gala, ux=gala$ux, lx=gala$lx, uy=gala$uy, ly=gala$ly, prepanel=prepanel.ci2, ylab='Probability', xlab='Species richness', layout=c(4,4), panel=function(x, y, subscripts) {
panel.xyplot(0:1000, dnbinom(0:1000, mu=gala$mu[subscripts], size=out.NB2$theta), type='h', col='grey')
panel.abline(v=x, col=2, lty=2)},
scale=list(x='free', y='free'), strip=strip.custom(par.strip.text=list(cex=0.8)))
par(ask=F)
out.pois <- glm(Species~log(Area), data=gala, family=poisson)
summary(out.pois)
residuals(out.pois, type='deviance')
sum(residuals(out.pois, type='deviance')^2)
residuals(out.pois, type='pearson')
sum(residuals(out.pois, type='pearson')^2)
fitted(out.pois)
sum(fitted(out.pois)<5)
summary(out.pois)
1-pchisq(649.22,27)
649.22/27
out.NB2 <- glm.nb(Species~log(Area), data=gala)
summary(out.NB2)
1-pchisq(31.295,27)
birds <- read.csv('ecol 563/birds.csv', header=T)
birds[1:8,]
tapply(birds$S,birds$landscape,mean)
tapply(birds$S,birds$landscape,mean,na.rm=T)
tapply(birds$S,list(birds$year,birds$landscape), mean, na.rm=T)
out.S <- glm(S ~ factor(year)+landscape, data=birds, family=poisson)
summary(out.S)
anova(out.S, test='Chisq')
summary(out.S)
sum(fitted(out.S)<5)
1-pchisq(532.25,251)
plot(S~area, data=birds)
plot(S~log(area), data=birds)
out.S1 <- glm(S ~ factor(year)+landscape+log(area), data=birds, family=poisson)
AIC(out.S,out.S1)
anova(out.S1,test='Chisq')
summary(out.S1)
1-pchisq(297.53,250)
out.S2 <- glm(S ~ factor(year)+landscape+offset(log(area)), data=birds, family=poisson)
out.S3 <- glm(S ~ factor(year)+landscape, offset=log(area), data=birds, family=poisson)
summary(out.S2)
coef(out.S2)
coef(out.S)
coef(out.S1)
summary(out.S1)
AIC(out.S, out.S1, out.S2)
table(birds$patch[!is.na(birds$S)])
library(lme4)
out.lmer <- lmer(S~factor(year)+landscape+log(area) + (1|patch), data=birds, family=poisson)
summary(out.lmer)
coef(out.S1)
AIC(out.lmer)
AIC(out.S1)
logLik(out.S1)
logLik(out.lmer)
poisloglike.log<-function(int.mod, mult=1) {
s <- attr(VarCorr(int.mod)[[1]],"stddev")
etavec<-int.mod@X %*% fixef(int.mod)
if(length(int.mod@offset)>0) etavec <- etavec+int.mod@offset
y <- int.mod@y
temp.dat <- data.frame(y,etavec)
split.by.group <- split(temp.dat, int.mod@flist)
pois.component <- function(xvec) {
base.eta <- paste("exp(", xvec[1,2], "+x)", sep='')
base.pois <- paste("dpois(", xvec[1,1], ",", base.eta,")", sep='')
if(nrow(xvec)>1)
for(i in 2:nrow(xvec)) {
cur.eta <- paste("exp(", xvec[i,2], "+x)", sep='')
cur.pois <- paste("dpois(", xvec[i,1], ",", cur.eta,")", sep='')
base.pois <- paste(base.pois, cur.pois, sep='*')
}
int.call <- paste("integrate(function(x) ", base.pois, "*dnorm(x,0,",s,")*mult, -Inf, Inf, rel.tol = 1e-12)", sep='')
eval(parse(text=int.call))
}
sapply(split.by.group,pois.component) -> like.terms
sum(log(unlist(like.terms[1,])/mult))
}
poisloglike.log(out.lmer)
logLik(out.S1)
attr(logLik(out.lmer),"df")
-2*poisloglike.log(out.lmer)+2*attr(logLik(out.lmer),"df")
AIC(out.S1)